import request from "@/utils/request";
import * as HighqualityType from "./type";

//歌单相关API
const apiPath = {
  highquality: "/top/playlist/highquality",
  songSheetInfo: "/playlist/detail",
  tags: "/playlist/highquality/tags",
  create: "/playlist/create",
  showSongSheet: "/user/playlist", //获取用户歌单
  playListTrack: "/playlist/track/all", //获取歌单所有音乐
  op: "/playlist/tracks", //对歌单添加或删除歌曲
  del: "/playlist/delete", //删除歌单
  recommend:"/recommend/resource", //推荐歌单
};

/**
 * 说明 : 歌单能看到歌单名字 , 但看不到具体歌单内容 , 调用此接口 , 传入歌单 id, 可 以获取对应歌单内的所有的音乐，
 * 但是返回的trackIds是完整的，tracks 则是不完整的，可拿全部 trackIds 请求一次 song/detail 接口获取所有歌曲的详情
 * @param 必选参数params.id : 歌单 id
 * @param 可选参数params.s : 歌单最近的 s 个收藏者
 * @returns 返回歌单详情信息
 */
export function getSongSheetInfo(params: HighqualityType.SongSheetInfo) {
  return request({
    url: apiPath.songSheetInfo,
    method: "get",
    params,
  });
}

/**
 * 获取精品歌单
 * @description 说明 : 调用此接口 , 可获取精品歌单
 * @param {String} params.cat: tag, 比如 " 华语 "、" 古风 " 、" 欧美 "、" 流行 ", 默认为 "全部",可从精品歌单标签列表接口获取(/playlist/highquality/tags) `可选`
 * @param {Number} params.limit: 取出歌单数量 , 默认为 50 `可选`
 * @param {String} params.before: 分页参数,取上一页最后一个歌单的 updateTime 获取下一页数据 `可选`
 * @example /top/playlist/highquality?before=1503639064232&limit=3
 */
export function getHighqualitySongList(
  params: HighqualityType.HighqualitySongListParams
) {
  return request({
    url: apiPath.highquality,
    method: "get",
    params,
  });
}

/**
 * 精品歌单标签列表
 * @description 说明 : 调用此接口 , 可获取精品歌单标签列表
 */
export function getHighqualitySongListTag() {
  return request({
    url: apiPath.tags,
    method: "get",
  });
}

/**
 * @说明 : 登录后调用此接口 , 传入用户 id, 可以获取用户歌单
 * @必选参数uid : 用户 id
 * @可选参数 :limit : 返回数量 , 默认为 30
 * @offset : 偏移数量，用于分页 , 如 :( 页数 -1)*30, 其中 30 为 limit 的值 , 默认为 0
 * @returns
 */
export function getSongSheet(uid: number) {
  return request({
    url: apiPath.showSongSheet,
    method: "get",
    params: { uid },
  });
}

/**
 * @说明 : 由于网易云接口限制，歌单详情只会提供 10 首歌，通过调用此接口，传入对应的歌单id，即可获得对应的所有歌曲
 * @param id 必选参数 : id : 歌单 id
 * @param limit 可选参数 : limit : 限制获取歌曲的数量，默认值为当前歌单的歌曲数量
 * @param offset 可选参数 : offset : 默认值为0
 * @returns
 */
export function getPlayListTrack(option: {
  id: number;
  limit?: number;
  offset?: number;
}) {
  return request({
    url: apiPath.playListTrack,
    method: "get",
    params: option,
  });
}

/**
 * 说明 : 调用此接口 , 传入歌单名字可新建歌单
 * @必选参数 : name : 歌单名
 * @可选参数
 * @privacy : 是否设置为隐私歌单，默认否，传'10'则设置成隐私歌单
 * @type : 歌单类型,默认'NORMAL',传 'VIDEO'则为视频歌单,传 'SHARED'则为共享歌单
 * @returns
 */
export function createSongSheet(option: {
  name: any;
  privacy?: number;
  type?: string;
}) {
  return request({
    url: apiPath.create,
    method: "get",
    params: option,
  });
}

/**
 * 对歌单添加或删除歌曲
 * @说明 : 调用此接口 , 可以添加歌曲到歌单或者从歌单删除某首歌曲 ( 需要登录 )
 * @必选参数 :
 * @op : 从歌单增加单曲为 add, 删除为 del
 * @pid : 歌单 id tracks: 歌曲 id,可多个,用逗号隔开
 */
export function opSongSheet(option: {
  pid: number;
  op: string;
  tracks: number;
}) {
  return request({
    url: apiPath.op,
    method: "get",
    params: option,
  });
}

/**
 * @说明 : 调用此接口 , 传入歌单 id 可删除歌单
 * @param必选参数 : id : 歌单 id,可多个,用逗号隔开
 * @returns
 */
export function deleteSongSheet(option: { id: number | string }) {
  return request({
    url: apiPath.del,
    method: "get",
    params: option,
  });
}


/**
 * @说明 : 调用此接口 , 可获得每日推荐歌单 ( 需要登录 )
 */
export function getRecommendSongSheet() {
  return request({
    url: apiPath.recommend,
    method: "get",
  });
}